﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using info.lundin.Math;
using System.Collections;

namespace Urbini.Fabio._5BI.Integrali
{
    public partial class Grafico : Form
    {
        // Attributi globali
        Parametro p;
        double SX = -10;
        double DX = +10;
        double Intervalli = 20;
        double h;

        public Grafico(Parametro P)
        {
            InitializeComponent();
            p = P;
            h = (DX - SX) / Intervalli;
        }

        private void Grafico_Load(object sender, EventArgs e)
        {
            List<double> Xparticolare = new List<double>();
            List<double> Yparticolare = new List<double>();

            List<double> X = new List<double>();
            List<double> Y = new List<double>();

            // Calcolo di X e Y della funzione
            for (double i = p.a; Math.Round(i, 2) <= p.b; i += ((p.b - p.a) / p.intervalli))
            {
                Xparticolare.Add(i);
                Yparticolare.Add(Funzione(i, p.funzione));
            }
            // Scelta punti per la funzione in generale
            for (double i = SX; i < DX; i += h)
            {
                X.Add(i);
                Y.Add(Funzione(i, p.funzione));
            }
            for (int i = 0; i < Xparticolare.Count; i++)
            {
                chart1.Series[0].Points.AddXY(X[i], Y[i]);
                chart2.Series[0].Points.AddXY(Xparticolare[i], Yparticolare[i]);
            }
        }
        double Funzione(double x, string funzione)
        {
            Hashtable hash;
            ExpressionParser e = new ExpressionParser();
            hash = new Hashtable();

            // Vengono RIMOSSI TUTTI GLI SPAZI 
            funzione = funzione.Trim();
            // Aggiunto oggetto key,value
            hash["x"] = Convert.ToString(x);
            return e.Parse(funzione, hash);
        }
    }
}
